/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


package sistematesis;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Eliminacion  extends javax.swing.JDialog{
    
    public static ArrayList Instancias;//posicion 0"Reprobados por Segunta" - Posicion 1 "Reprobados por Mas de Segunda"
    public static ArrayList RPR ;//contiene asignaturas reprobadas durante el periodo
    public static ArrayList DetalleRenuncia;//Detalle de Renuncia para mostrar en boton detalle
    public static ArrayList RUTsReprobados; // Contiene un resumen con los ruts que figuran con asignaturas repobadas.
    public static ArrayList RutsEnPeriodo;//Contiene todos los ruts que contiene la funete de datos.
    public static ArrayList RutsEnPrimerAño;//Contiene todos los ruts que contiene la funete de datos.
    public static int porAusentismo=0;
    public static int TotalPerdidasCarrera=0;
    public static int porBajoCredito;
    public static int CantidadDeAsignaturas=0;
    public static ArrayList porAreaConocimiento;
    public static ArrayList AsignaturasGeneranPerdida;
    public static ArrayList porPeriodo;
    public static ArrayList Periodos;
    public static ArrayList RutsSegundaIntanciaRPR;
    public static ArrayList RutsMasDeSegundaRPR;
    public static ArrayList RutsPorAusentismo;
    public static ArrayList RutsPorCantCreditos;
    
    public static ArrayList InstanciasDeReprobacion(String ruta,Double DesdeParam, Double HastaParam) throws IOException{
        RutsSegundaIntanciaRPR= new ArrayList ();
        RutsMasDeSegundaRPR = new ArrayList ();
        RUTsReprobados=new ArrayList();
        Instancias=new ArrayList();
        DetalleRenuncia= new ArrayList();
        RPR=new ArrayList();
        Double Desde=DesdeParam;
        Double Hasta=HastaParam;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(ruta));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;      
        int Estado=8;
        int AñoSemestre=2;
        int j=0,u=0,s=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell((int) AñoSemestre);
             if (cell != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double

                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(Desde<=Periodo && Periodo<=Hasta)
                         {
                              String celda;
                              celda = row.getCell((int) Estado).toString().trim();
                              celda.replace(" ", "");
                          
                           if(celda.equals("RPR")||celda.equals("NCR"))// Verifica que celda alumno reprobado.
                                {
                               RPR.add(new ArrayList());
                               ((ArrayList)RPR.get(u)).add(row.getCell(0).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(1).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(2).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(3).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(4).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(5).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(6).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(7).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(8).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(9).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(10).toString().replace(" ","").trim());
                               ((ArrayList)RPR.get(u)).add(row.getCell(11).toString().replace(" ","").trim());

                               if(!RUTsReprobados.contains(row.getCell(0).toString().replace(" ","").trim())){
                               
                               RUTsReprobados.add(row.getCell(0).toString().replace(" ", "").trim());//rut
                               j++;
                               }

                                u++;

                        }

                    }
                 }
            }
        }
        //Separa por rut y controla instancias de reprobacion
//        System.out.println(RUTsReprobados+""+j);
        Instancias.add(0,(int)0);
        Instancias.add(1,(int)0);
        AsignaturasGeneranPerdida=new ArrayList();
        porPeriodo= new ArrayList();
        
        int t=0,c=0;
        int cont=0;
        int v=0;     
        for(int r=0; r<RUTsReprobados.size();r++){//Recorre los ruts que contienen una rerpobación durante el periodo
            ArrayList Revisadas = new ArrayList();
            ArrayList RutEspecifico = LlenaArregloConRutEspecificoRPR(RUTsReprobados.get(r).toString().replaceAll(" ", "").trim());
            for(int z=0;z<RutEspecifico.size();z++){
                String aux=((ArrayList)RutEspecifico.get(z)).get(10).toString().replaceAll(" ", "").trim();//Contiene COdigo Generico
                String nom=((ArrayList)RutEspecifico.get(z)).get(6).toString().replaceAll(" ", "").trim();//Contiene Nombre Asignatura
                String AñoCursado=((ArrayList)RutEspecifico.get(z)).get(2).toString().replaceAll(" ", "").trim();//Contiene Año Cuersado.
                if(!Revisadas.contains(aux)){//Evita repetir codigo de asignatura
                            Revisadas.add(aux);
                            for(int x=0; x<RutEspecifico.size();x++){//recorre el arreglo con un rut específico.
                               if(Revisadas.get(Revisadas.size()-1).equals(((ArrayList)RutEspecifico.get(x)).get(10).toString().replaceAll(" ", "").trim())){// busca cantidad de reprobaciones de una asignatura
                                 cont++;
                                }
//                                 System.out.println((((ArrayList)RutEspecifico.get(x)).get(0).toString().replaceAll(" ", "").trim())+""+Revisadas+"ddd"+cont+" ");
                            }

                if(cont==2){
                    RutsSegundaIntanciaRPR.add(RUTsReprobados.get(r));
                    Instancias.set(0,Integer.parseInt(Instancias.get(0).toString().replace(" ", "").trim())+1);//contabiliza instancias de reprobacion
                    /**Contabilida Perdida por Asignaturas.**/
                    if(busca(AsignaturasGeneranPerdida, aux)){
                       
                                    int a=Integer.parseInt((((ArrayList)AsignaturasGeneranPerdida.get((Pocision(AsignaturasGeneranPerdida, aux)))).get(2)).toString().replace(" ","").trim());
                                    a++;
                                    ((ArrayList)AsignaturasGeneranPerdida.get((Pocision(AsignaturasGeneranPerdida, aux)))).set(2, a);
//                                     System.out.println("pase por aki"+a);
                    }else{
                        AsignaturasGeneranPerdida.add(new ArrayList());
                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add(aux);
                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add(nom);
                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add((int)1);

                        v++;
                    }
                    /**Fin Contabiliza Perdida por Asignaturas**/
                    /**Contabilida Perdida por Periodo.**/
                    if(busca(porPeriodo, AñoCursado)){

                                    int a=Integer.parseInt((((ArrayList)porPeriodo.get((Pocision(porPeriodo, AñoCursado)))).get(1)).toString().replace(" ","").trim());
                                    a++;
                                    ((ArrayList)porPeriodo.get((Pocision(porPeriodo, AñoCursado)))).set(1, a);
                                     
                    }else{
                        porPeriodo.add(new ArrayList());
                        ((ArrayList)porPeriodo.get(c)).add(AñoCursado);
                       
                        ((ArrayList)porPeriodo.get(c)).add((int)1);
                        c++;
                    }
                    /**Fin Contabiliza Perdida por Periodo**/

                   
                }
                if(cont>2){
                    RutsMasDeSegundaRPR.add(RUTsReprobados.get(r));
                    Instancias.set(1,Integer.parseInt(Instancias.get(1).toString().replace(" ", "").trim())+1);//Contabiliza instancias de Rerobacion
                    /**Contabiliza Perdidas por Asignaturas**/
                      if(busca(AsignaturasGeneranPerdida, aux)){
                                    int a=Integer.parseInt((((ArrayList)AsignaturasGeneranPerdida.get((Pocision(AsignaturasGeneranPerdida, aux)))).get(2)).toString().replace(" ","").trim());
                                    a++;
                                    ((ArrayList)AsignaturasGeneranPerdida.get((Pocision(AsignaturasGeneranPerdida, aux)))).set(2, a);
//                                     System.out.println("pase por aki"+a);
                    }else{
                        AsignaturasGeneranPerdida.add(new ArrayList());
                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add(aux);
                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add(nom); 
                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add((int)1);
                        v++;
                    }
                    /**FIN Contabiliza Perdida por Asignaturas.**/
                     /**Contabilida Perdida por Periodo.**/
                    if(busca(porPeriodo, AñoCursado)){

                                    int a=Integer.parseInt((((ArrayList)porPeriodo.get((Pocision(porPeriodo, AñoCursado)))).get(1)).toString().replace(" ","").trim());
                                    a++;
                                    ((ArrayList)porPeriodo.get((Pocision(porPeriodo, AñoCursado)))).set(1, a);

                    }else{
                        porPeriodo.add(new ArrayList());
                        ((ArrayList)porPeriodo.get(c)).add(AñoCursado);

                        ((ArrayList)porPeriodo.get(c)).add((int)1);
                        c++;
                    }
                    /**Fin Contabiliza Perdida por Periodo**/
                }
                cont=0;
                }
              

            }
               
        }
    TotalPerdidasCarrera=TotalPerdidasCarrera+Integer.parseInt(Instancias.get(0).toString().replace(" ",""))+Integer.parseInt(Instancias.get(1).toString().replaceAll(" ", ""));
    return Instancias;
   }

    public static ArrayList RprPorSegunda(){
        return RutsSegundaIntanciaRPR;
    }

    public static ArrayList RprPorMasDeSegunda(){
        return RutsMasDeSegundaRPR;
    }

    public static ArrayList porAsignatura(){
//    System.out.println(AsignaturasGeneranPerdida);
    return AsignaturasGeneranPerdida;
  }

    public static int devuelveTotalInscripciones(){

    return CantidadDeAsignaturas;
   }

   public static ArrayList porPeriodo(){
//    System.out.println(porPeriodo);
    return porPeriodo;
  }

   public static int DevuelveTotal(){
  return TotalPerdidasCarrera;
  }

   public static ArrayList porAreaConocimiento(String RutaMalla)throws  IOException{
        porAreaConocimiento= new ArrayList();
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(RutaMalla));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        int Estado=8;
        int CodigoCarrera=2;
        int v=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell(CodigoCarrera);
                
                if (cell != null)
                {           
                   for (int x=0;x<AsignaturasGeneranPerdida.size();x++){                    
                      if(row.getCell(2).toString().replace(" ", "").trim().substring(0, 6).equals(((ArrayList)AsignaturasGeneranPerdida.get(x)).get(0).toString().replace(" ","").trim().substring(0, 6))){
                        
                          if(busca(porAreaConocimiento,row.getCell(4).toString().replace(" ", ""))){//revisa si la asignatura genera perdida
//                                    System.out.println(row.getCell(3).toString().replace(" ", "").trim());
                                    int a=Integer.parseInt((((ArrayList)porAreaConocimiento.get((PocisionAux(porAreaConocimiento,row.getCell(4).toString().replace(" ", "").trim())))).get(1)).toString().replace(" ","").trim());
                                    a=a+Integer.parseInt(((ArrayList)AsignaturasGeneranPerdida.get(x)).get(2).toString().replace(" ", ""));
                                    ((ArrayList)porAreaConocimiento.get((Pocision(porAreaConocimiento,row.getCell(4).toString().replace(" ", "").trim())))).set(1,a);//                                    
                                    }else{
                                    porAreaConocimiento.add(new ArrayList());
                                    ((ArrayList)porAreaConocimiento.get(v)).add(row.getCell(4).toString().replace(" ", ""));
                                    ((ArrayList)porAreaConocimiento.get(v)).add(((ArrayList)AsignaturasGeneranPerdida.get(x)).get(2));
                                    v++;
                                    }
//                                porAreaConocimiento.add(new ArrayList());
//                                ((ArrayList)porAreaConocimiento.get(j)).add(row.getCell(4).toString().replace(" ", "").trim());
//                                ((ArrayList)porAreaConocimiento.get(j)).add(((ArrayList)AsignaturasGeneranPerdida.get((PocisionAux(AsignaturasGeneranPerdida, row.getCell(2).toString().replace(" ", "").trim())))).get(2));
//                                j++;
                       
                       }
                   }
                }
            }
        }
//        System.out.println(AsignaturasGeneranPerdida);
//        ArrayList CantAreaConocimiento = new ArrayList();
//        int s =0;
//        for(int t=0; t<porAreaConocimiento.size();t++){
//            if(busca(AsignaturasGeneranPerdida, )){
//                                    int a=Integer.parseInt((((ArrayList)AsignaturasGeneranPerdida.get((Pocision(AsignaturasGeneranPerdida, aux)))).get(2)).toString().replace(" ","").trim());
//                                    a++;
//                                    ((ArrayList)AsignaturasGeneranPerdida.get((Pocision(AsignaturasGeneranPerdida, aux)))).set(2, a);
////                                     System.out.println("pase por aki"+a);
//                    }else{
//                        AsignaturasGeneranPerdida.add(new ArrayList());
//                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add(aux);
//                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add(nom);
//                        ((ArrayList)AsignaturasGeneranPerdida.get(v)).add((int)1);
//                        v++;
//                    }
//        }
//        System.out.println(AsignaturasGeneranPerdida+"    "+porAreaConocimiento);

        return porAreaConocimiento;
  }

   public static ArrayList RutsEnPeriodo(String rutaFuente,Double DesdeParam, Double HastaParam) throws IOException{
        RutsEnPeriodo = new ArrayList();
        Double Desde=DesdeParam;
        Double Hasta=HastaParam;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(rutaFuente));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        int Estado=8;
        int AñoSemestre=2;
        int j=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell((int) AñoSemestre);
             if (cell != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double

                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(Desde<=Periodo && Periodo<=Hasta)
                         {
                              String celda;
                              celda = row.getCell((int) Estado).toString().trim();
                              celda.replace(" ", "");
                           if(1==1)//Pasa Siempre.
                                {
                               if(!RutsEnPeriodo.contains(row.getCell(0).toString().replace(" ","").trim())){

                               RutsEnPeriodo.add(row.getCell(0).toString().replace(" ", "").trim());//rut
                               j++;
                               }
                        }

                    }
                 }
            }
        }
       
  return RutsEnPeriodo;
  }

   public static ArrayList RutsEnPeriodoPrimerAño(String rutaFuente,Double DesdeParam, Double HastaParam) throws IOException{
        RutsEnPrimerAño = new ArrayList();
        Double Desde=DesdeParam;
        Double Hasta=HastaParam;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(rutaFuente));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        int Estado=8;
        int AñoSemestre=2;
        int j=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell((int) AñoSemestre);
             if (cell != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double

                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(Desde<=Periodo && Periodo<=Hasta)
                         {
                              String celda;
                              celda = row.getCell((int) Estado).toString().trim();
                              celda.replace(" ", "");
                           if(1==1)//Pasa Siempre.
                                {
                               if(!RutsEnPrimerAño.contains(row.getCell(0).toString().replace(" ","").trim())&& row.getCell(2).toString().replace(" ", "").trim().equals( row.getCell(3).toString().replace(" ", "").trim())){

                               RutsEnPrimerAño.add(row.getCell(0).toString().replace(" ", "").trim());//rut
                               j++;
                               }
                        }

                    }
                 }
            }
        }

  return RutsEnPrimerAño;
  }

   public static int porCantidadDeCreditos(String rutaFuente,Double DesdeParam, Double HastaParam) throws IOException{
        porBajoCredito=0;
       Double Desde=DesdeParam;
       Double Hasta=HastaParam;
       
       Double cantPeriodos= ((HastaParam-DesdeParam)+1)*2;
      /**llena Arreglo con periodos**/
      Periodos= new ArrayList();
      if(DesdeParam%1==0){
      String AñoDesdeAux=new String();
      AñoDesdeAux=DesdeParam.toString().substring(0,4);
      Periodos.add(AñoDesdeAux+"-1");
         }else{
      String AñoDesdeAux1=new String();
      AñoDesdeAux1=DesdeParam.toString();
      AñoDesdeAux1=DesdeParam.toString().substring(0, 4);
      Periodos.add(AñoDesdeAux1+"-2");
         }

     
      for(int u =1; u<cantPeriodos.intValue()-1;u++){
            DesdeParam=DesdeParam+0.5;
            if(DesdeParam%1==0){
            String AñoDesdeAux=new String();
            AñoDesdeAux=DesdeParam.toString().substring(0,4);
            Periodos.add(AñoDesdeAux+"-1");
                }else{
            String AñoDesdeAux1=new String();
            AñoDesdeAux1=DesdeParam.toString();
            AñoDesdeAux1=DesdeParam.toString().substring(0,4);
            Periodos.add(AñoDesdeAux1+"-2");
         }
      }
//      System.out.println(Periodos);
      RutsPorCantCreditos = new ArrayList ();
      int w=0;
      ArrayList Ruts = RutsEnPeriodo(rutaFuente, Desde, Hasta);
       for(int i=0; i<Ruts.size();i++){
          ArrayList DatosRutEspecifico= LlenaArregloConRutEspecifico(Ruts.get(i).toString().replace(" ", "").trim(), rutaFuente, Desde, Hasta);
//          System.out.println(DatosRutEspecifico);
//          for(int ii=0; ii<DatosRutEspecifico.size();ii++){//recorre datos especificos rut
              for(int j=0; j<Periodos.size() && Periodos.get(j)!= Periodos.get(Periodos.size()-1);j++){//"for" que recorre periodos(1)
                  if(buscaAux(DatosRutEspecifico, Periodos.get((int)j).toString().replace(" ", "").trim())){//Pregunta si está incrito en el preiodo
                      
                      ArrayList Extracto = new ArrayList();
                      ArrayList Control = new ArrayList();
                      int v=0;
                      for(int r=0; r<DatosRutEspecifico.size();r++){//"for" que llena el arreglo "Extracto"
                          if(((ArrayList)DatosRutEspecifico.get(r)).get(2).toString().replace(" ", "").trim().equals(Periodos.get((int)j))){
                              Control.add(Periodos.get(j));
                              Extracto.add(new ArrayList());
                              ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(0));//agrega RUT a EXTRACTO
                              ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(2));//agrega AÑO CURSADO a EXTRACTO
                              ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(3));//agrega AÑO INGRESO a EXTRACTO
                              ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(7));//agrega ESTADO a EXTRACTO
                              ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(8));//agrega CREDITOS a EXTRACTO
                              ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(4));//agrega CREDITOS a EXTRACTO
                              v++;
                          }
                      }//fin "for" que llena el arreglo "Extracto".
                      boolean flag = false;
                      int z=j;
//                      z++;
                      for( z++ ;z<Periodos.size()&&flag == false ;z++){
                            if(buscaAux(DatosRutEspecifico, Periodos.get(z).toString().replace(" ", "").trim())){
                                 
                                 for(int r=0; r<DatosRutEspecifico.size();r++){//"for" que llena el arreglo "Extracto"
                                    if(((ArrayList)DatosRutEspecifico.get(r)).get(2).toString().replace(" ", "").trim().equals(Periodos.get((int)z))){
                                        Control.add(Periodos.get(z));
                                        Extracto.add(new ArrayList());
                                        ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(0));//agrega RUT a EXTRACTO
                                        ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(2));//agrega AÑO CURSADO a EXTRACTO
                                        ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(3));//agrega AÑO INGRESO a EXTRACTO
                                        ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(7));//agrega ESTADO a EXTRACTO
                                        ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(8));//agrega CREDITOS a EXTRACTO
                                        ((ArrayList)Extracto.get(v)).add(((ArrayList)DatosRutEspecifico.get(r)).get(4));//agrega CREDITOS a EXTRACTO
                                    
                                        v++;
                                        flag=true;
                                    }
                                }
                            }           
                      }
                       //Analisis de "EXTRACTO" para contabilizar  cantidad de causales de eliminacion
                     if(Control.size()<2){
                      boolean EsMechon=false;
                      int TotalCrInscr=0, TotalCrApr=0, TotalCrInsSem1=0, TotalCrInscSem2=0;

                      for(int c=0; c<Extracto.size();c++){
                            if(((ArrayList)Extracto.get(c)).get(1).toString().replace(" ", "").trim().substring(0,4).equals(((ArrayList)Extracto.get(c)).get(2).toString().replace(" ", "").trim().substring(0,4))){
                                EsMechon=true;
                            }
                            TotalCrInscr=TotalCrInscr+Integer.parseInt(((ArrayList)Extracto.get(c)).get(4).toString().replace(" ", "").trim().substring(0,1));
                            if(((ArrayList)Extracto.get(c)).get(3).toString().replace(" ", "").trim().equals("APR")){
                            TotalCrApr=TotalCrApr+Integer.parseInt(((ArrayList)Extracto.get(c)).get(4).toString().replace(" ", "").trim().substring(0,1));
                            }
                       

                            if(((ArrayList)Extracto.get(0)).get(1).toString().replace(" ", "").trim().equals(((ArrayList)Extracto.get(c)).get(1).toString().replace(" ", "").trim())){
                            TotalCrInsSem1= TotalCrInsSem1+1;
                            }
                            if(((ArrayList)Extracto.get(Extracto.size()-1)).get(1).toString().replace(" ", "").trim().equals(((ArrayList)Extracto.get(c)).get(1).toString().replace(" ", "").trim())){
                            TotalCrInscSem2= TotalCrInscSem2+1;
                            }
                      }


                      boolean InscribioMasDe16Cr = true;

                      if(TotalCrInsSem1<16 || TotalCrInscSem2 <16){
                            InscribioMasDe16Cr = false;
                      }

                      if(EsMechon==true){
                          if(InscribioMasDe16Cr){
                                if(TotalCrApr<16){
                                    porBajoCredito=porBajoCredito+1;
                                    RutsPorCantCreditos.add(Ruts.get(i));
                                }
                          }else{
                              if(TotalCrApr<(TotalCrInscr/2)){
                                    porBajoCredito=porBajoCredito+1;
                                    RutsPorCantCreditos.add(Ruts.get(i));
                              }
                          }
                      }else{
                          if(InscribioMasDe16Cr){
                                if(TotalCrApr<20){
                                    porBajoCredito=porBajoCredito+1;
                                    RutsPorCantCreditos.add(Ruts.get(i));
                                }
                          }else{
                              if(TotalCrApr<(TotalCrInscr/2)){
                                    porBajoCredito=porBajoCredito+1;
                                    RutsPorCantCreditos.add(Ruts.get(i));
                              }
                          }
                      }
                   }
                }// fin Pregunta si esta incrito en el periodo

              }//fin "for" que recorre periodos(1).

     }
    

        return porBajoCredito;
  }

   public static int perdidaPorAusentismo(String rutaFuente,Double DesdeParam, Double HastaParam) throws IOException{
      porAusentismo=0;
      RutsPorAusentismo = new ArrayList ();
      ArrayList Ruts = RutsEnPeriodo(rutaFuente, DesdeParam, HastaParam);
//       System.out.println("por ausentismo");
      for(int i=0; i<Ruts.size();i++){//recorre por ruts
          
          ArrayList DatosRutEspecifico= LlenaArregloConRutEspecifico(Ruts.get(i).toString().replace(" ", "").trim(), rutaFuente, DesdeParam, HastaParam);
          ArrayList Ordenados= new ArrayList();
         
           for(int z=0;z<DatosRutEspecifico.size();z++){//llena arreglo "ORDENADO"

                String aux= ((ArrayList)DatosRutEspecifico.get(z)).get(2).toString().replace(" ", "").trim();           
                String año= aux.substring(0,4);
                String Semestre= aux.substring(5);
                Double AñoSemestre = Double.valueOf(año);
                if(Semestre.equals("2"))AñoSemestre=AñoSemestre+0.5;
                if(Ordenados.isEmpty()){
                    Ordenados.add(AñoSemestre);
                }else{
                    if(!Ordenados.contains(AñoSemestre)){
                        Ordenados.add(AñoSemestre);
                    }
                }
                
          }
          Collections.sort(Ordenados);

//        
          //Contabilizamos
          int f=0,s=0;
          ArrayList Resultados = new ArrayList();
          for(f=0;f<Ordenados.size()-1;f++){
              if(Ordenados.get(f+1)!=null){
                Double R=Double.valueOf(Ordenados.get(f).toString().replace(" ", "").trim())-Double.valueOf(Ordenados.get(f+1).toString().replace(" ", "").trim());
                Resultados.add(R);
              }
          }
          if(!Ordenados.get(0).toString().equals(DesdeParam.toString())){
                Double Aux = DesdeParam-0.5;
                Resultados.add(Aux-Double.valueOf(Ordenados.get(0).toString().replace(" ", "").trim()));

          }
          if(!Ordenados.get(Ordenados.size()-1).toString().equals(HastaParam.toString())){
                Double aux1=HastaParam+0.5;
                Resultados.add(Double.valueOf(Ordenados.get(Ordenados.size()-1).toString().replace(" ", "").trim())-aux1);

          }


          Double ContRT1S =0.0, ContRT2S =0.0;
          //Recorremos los resultados
          for(s=0; s< Resultados.size();s++){

                if(Double.valueOf(Resultados.get(s).toString().replace(" ","").trim())==-1.0){
                    ContRT1S++;
                }
                if(Double.valueOf(Resultados.get(s).toString().replace(" ","").trim())==-1.5){
                    ContRT2S++;
                }
          }
//          System.out.println(ContRT1S+"mmmm"+ContRT2S);
          //Conclusiones
          if (ContRT1S/3>1){
              Double aux=ContRT1S/3;
              porAusentismo = aux.intValue();
              RutsPorAusentismo.add(Ruts.get(i));
          }
          if(ContRT2S>=1){
            porAusentismo = porAusentismo+ContRT2S.intValue();
            RutsPorAusentismo.add(Ruts.get(i));
          }
     }
      
  
      return porAusentismo;
  }

   public static ArrayList RutsAusentismo(){
    return RutsPorAusentismo;
   }

   public static ArrayList RutsCreditos(){
   return RutsPorCantCreditos;
   }

  public static ArrayList LlenaArregloConRutEspecifico(String Rut,String rutaFuente,Double DesdeParam, Double HastaParam) throws IOException{
      CantidadDeAsignaturas=0;
      ArrayList ArregloDatosEspecificos = new ArrayList();
      Double Desde=DesdeParam;
      Double Hasta=HastaParam;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(rutaFuente));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        int Estado=8;
        int AñoSemestre=2;
        int u=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell((int) AñoSemestre);
             if (cell != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double

                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(Desde<=Periodo && Periodo<=Hasta)
                         {
                             CantidadDeAsignaturas=CantidadDeAsignaturas+1;
                              String celda;
                              celda = row.getCell((int) Estado).toString().trim();
                              celda.replace(" ", "");
                              
                           if(Rut.equals(row.getCell(0).toString().replace(" ", "").trim()))// Verifica que celda alumno reprobado.
                                {
                               ArregloDatosEspecificos.add(new ArrayList());
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(0).toString().replace(" ","").trim()); //RUT
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(1).toString().replace(" ","").trim()); //CODIGO ASIGNATURA
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(2).toString().replace(" ","").trim()); //AÑO CURSADO
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(3).toString().replace(" ","").trim()); //AÑO INGRESO **
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(4).toString().replace(" ","").trim()); //CODIGO ASIGNATURA
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(5).toString().replace(" ","").trim()); //SECCION
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(6).toString().replace(" ","").trim()); //NOMBRE ASIGNATURA
//                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(7).toString().replace(" ","").trim()); CALIFICACION NO SE UTILIZA
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(8).toString().replace(" ","").trim()); //ESTADO
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(9).toString().replace(" ","").trim()); //CREDITOS
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(10).toString().replace(" ","").trim());//GENERICO
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(11).toString().replace(" ","").trim());//NOMBRE PROFESOR
                                u++;
                        }
                    }
                }
            }
        }

        HSSFWorkbook libroX= new HSSFWorkbook(new FileInputStream(rutaFuente));
        HSSFSheet hojaX = libroX.getSheet(libroX.getSheetName(1));
        HSSFRow rowX = null;
        HSSFCell cellX = null;
        /* RECORRE DOCUMENTO*/
        for (int i=1, z=hojaX.getLastRowNum(); i<=z; i++ )
        {
             
           rowX = hojaX.getRow(i);
           if (rowX != null) {
                cellX = rowX.getCell((int) AñoSemestre);
             if (cellX != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cellX.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double

                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(Desde<=Periodo && Periodo<=Hasta)
                         {
                               CantidadDeAsignaturas=CantidadDeAsignaturas+1;
                             if(Rut.equals(rowX.getCell(0).toString().replace(" ", "").trim()))//BUSCA RUT DEL ALUMNO.
                                {
                               ArregloDatosEspecificos.add(new ArrayList());
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(0).toString().replace(" ","").trim()); //RUT
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(1).toString().replace(" ","").trim()); //CODIGO ASIGNATURA
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(2).toString().replace(" ","").trim()); //AÑO CURSADO
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(3).toString().replace(" ","").trim()); //AÑO INGRESO **
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(4).toString().replace(" ","").trim()); //CODIGO ASIGNATURA
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(5).toString().replace(" ","").trim()); //SECCION
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(6).toString().replace(" ","").trim()); //NOMBRE ASIGNATURA
//                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(row.getCell(7).toString().replace(" ","").trim()); CALIFICACION NO SE UTILIZA
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add("REN"); //ESTADO
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(7).toString().replace(" ","").trim()); //CREDITOS
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(9).toString().replace(" ","").trim());//GENERICO
                               ((ArrayList)ArregloDatosEspecificos.get(u)).add(rowX.getCell(8).toString().replace(" ","").trim());//NOMBRE PROFESOR
                                u++;
                        }
                    }
                }
            }
        }
//        System.out.println(ArregloDatosEspecificos);
      return ArregloDatosEspecificos;
  }


  private static ArrayList LlenaArregloConRutEspecificoRPR(String Rut) throws FileNotFoundException, IOException{

        ArrayList ArregloDatosEspecificos=new ArrayList();
        int j=0;
        for(int z=0; z<RPR.size();z++){
     
                           if(((ArrayList)RPR.get(z)).get(0).equals(Rut))// Verifica que celda alumno aprobado.
                                {
                                
                             ArregloDatosEspecificos.add(new ArrayList());
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(0).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(1).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(2).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(3).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(4).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(5).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(6).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(7).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(8).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(9).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(10).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(11).toString().replace(" ", ""));
                            j++;
                            }
//                           System.out.println(RPR);
                        }
        return ArregloDatosEspecificos;
    }


   public static boolean busca(ArrayList Arreglo, String Loquesebusca){
        for(int i=0; i<Arreglo.size()&& !Arreglo.isEmpty();i++){
            String aux =((ArrayList)Arreglo.get(i)).get(0).toString().replace(" ", "").trim();
            if (aux == null ? Loquesebusca == null : aux.equals(Loquesebusca.replace(" ", "").trim())){
                return true;
            }
        }
        return false;
     }


   private static boolean buscaAux(ArrayList Arreglo, String Loquesebusca){
        for(int i=0; i<Arreglo.size();i++){
            String aux =((ArrayList)Arreglo.get(i)).get(2).toString().replace(" ", "").trim();
            aux.replace(" ", "").trim();
            if (aux == null ? Loquesebusca == null : aux.equals(Loquesebusca.replace(" ", "").trim())){
                return true;
            }
        }
        return false;
     }


   public static int Pocision(ArrayList Arreglo, String Loquesebusca){
//        System.out.println(Arreglo);
       
        for(int i=0; i<Arreglo.size();i++){
            String aux =(((ArrayList)Arreglo.get(i)).get(0)).toString().replace(" ", "").trim();
//            System.out.println(Loquesebusca+"<<porPeriodo>>"+aux);
            if (aux == null ? Loquesebusca == null : aux.equals(Loquesebusca.replace(" ", "").trim())){
                return i;
            }
          }
        return -1;
     }
    private static int PocisionAux(ArrayList Arreglo, String Loquesebusca){
        for(int i=0; i<Arreglo.size();i++){  
            String aux =(((ArrayList)Arreglo.get(i)).get(0)).toString().replace(" ", "").trim();
//            System.out.println(Loquesebusca+"<<porPeriodo>>"+aux);
            if (aux == null ? Loquesebusca == null : aux.equals(Loquesebusca.replace(" ", ""))){
//                 System.out.println(Arreglo+""+Loquesebusca+"");
                return i;
            }
          }
        return -1;
     }
}
